package com.wn.service.utils

import android.widget.ImageView
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.databinding.BindingAdapter
import com.bumptech.glide.Glide
import com.daimajia.numberprogressbar.NumberProgressBar
import com.wn.service.R

/**
 * @Author: wn
 * @Date: 2023/1/31 17:19
 * @Description: 项目适配用的 BindAdapter -- DataBinding 扩展支持
 * xml 绑定的 数据 改变 就会触发 函数
 */

/**
 * app:srcCompat的 DataBinding扩展
 * requireAll 默认 true 必须用到全部形参
 * @param imageView ImageView  支持图片加载 绑定
 * @param src Any?
 */
@BindingAdapter("app:srcCompat", requireAll = false)
fun imgSrcCompat(imageView: ImageView, src: Any?) {
  //如果src为空，设置默认图片
//  val imgRes = src ?: R.drawable.icon_default_header
  val imgRes = when (src) {
    // 如果开头是//img.cniao5.com就添加前缀https:
    is String -> if (src.startsWith("//img.cniao5.com")) "https:$src" else src
    else -> src ?: R.drawable.icon_default_header
  }
  Glide.with(imageView)
    .load(imgRes)
    .into(imageView)
}

/**
 * 修改图片颜色 -- setColorFilter
 * 图片资源支持 tint 颜色修改，支持colorRes和colorInt形式   R.color.primary   Color.RED
 */
@BindingAdapter("app:tint")
fun imgColor(imageView: ImageView, color: Int) {
  if (color == 0) return
  runCatching {
//    imageView.setColorFilter(imageView.resources.getColor(color))
    imageView.setColorFilter(ContextCompat.getColor(imageView.context, color))
  }.onFailure {// 捕获异常，说明此时是Color.RED形式 colorInt
    imageView.setColorFilter(color)
  }
}

/**
 * 修改字体颜色  原生
 * textColor的binding形式，支持colorRes和colorInt形式
 */
@BindingAdapter("android:textColor")
fun tvColor(tv: TextView, color: Int) {
  if (color == 0) return
  runCatching {
    // 如果是colorInt形式，会报错
    tv.setTextColor(ContextCompat.getColor(tv.context, color))
  }.onFailure {// 捕获异常，说明此时是Color.RED形式
    tv.setTextColor(color)
  }
}

/*
* todo 进度条，NumberProgressBar的扩展函数 将传来的progress*100转化为百分比形式 并且支持dataBinding加载
*  NumberProgressBar 是自定义组件
* */

@BindingAdapter("app:progress_current", requireAll = false)
fun setProgress(pb: NumberProgressBar, progress: Double?) {
  pb.progress = (progress ?: 0.0).toInt() // *100，转化为百分比显示
}
